package net.crashtoot.picasa.core.dao.impl;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import net.crashtoot.picasa.core.dao.PhotoArchiveDao;

import org.springframework.stereotype.Repository;

@Repository("photoArchiveDao")
public class PhotoArchiveDaoImpl implements PhotoArchiveDao {
    // private static final Log log = LogFactory.getLog(PhotoArchiveDaoImpl.class);

    // Construire un filtre de fichiers pour les extensions d'images support�s par ImageIO
    // static FilenameFilter imageIOFilter = new FilenameFilter() {
    // public boolean accept(File file, String filename) {
    // String lowerFilename = filename.toLowerCase();
    // return lowerFilename.endsWith(".jpg")
    // || lowerFilename.endsWith(".jpeg")
    // || lowerFilename.endsWith(".png")
    // || lowerFilename.endsWith(".gif")
    // || lowerFilename.endsWith(".bmp");
    // }
    // };

    private static boolean accept(final File file) {
        final String lowerFilename = file.getName().toLowerCase();
        return lowerFilename.endsWith(".jpg") || lowerFilename.endsWith(".jpeg") || lowerFilename.endsWith(".png")
                || lowerFilename.endsWith(".gif") || lowerFilename.endsWith(".bmp");
    }

    public List<File> listPhotos(final String directory) throws IOException {
        // File[] images = new File(directory).listFiles(imageIOFilter);

        final List<File> photos = new ArrayList<File>();
        browseDirectory(new File(directory), photos);

        return photos;
    }

    /**
     * Parcours récursif du répertoire pour retrouver des photos.
     */
    public static void browseDirectory(final File directory, final List<File> photos) {
        if (directory.isDirectory()) {
            final File[] files = directory.listFiles();
            if (files != null) {
                for (int i = 0; i < files.length; i++) {
                    if (accept(files[i])) {
                        // TODO si contient déjà => erreur, conflit ?
                        photos.add(files[i]);
                    } else {
                        // Appel récursif sur les sous-répertoires
                        browseDirectory(files[i], photos);
                    }

                }
            }
        }
    }
}
